home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / MSDOS / find.awk < prev    next >
Text File  |  1979-12-31  |  1KB  |  65 lines

  1. # ---------------------------------- find.awk -------------------------------
  2.  
  3. # This is part of the flight simulator 'fly8'.
  4. # Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5.  
  6. # Find an address in the link map. used when a divide-overflow is reported
  7. # in the log file.
  8. #
  9.  
  10. BEGIN {
  11.     address = -1
  12.     main = 0
  13.     prevline = ""
  14.     prevaddr = ""
  15. }
  16.  
  17. address >= 0 {
  18.     if (a2n($1) >= address) {
  19.         printf("%s [+0x%x]\n", prevline, address - a2n(prevaddr))
  20.         exit (0)
  21.     }
  22.     prevline = $0
  23.     prevaddr = $1
  24. }
  25.  
  26. address < 0 {
  27.     if ($0 ~ "Publics by Value") {
  28.         address = a2n(AD)
  29.         if (address < 0) {
  30.             print "Bad address " AD
  31.             exit (1)
  32.         }
  33.         address += main
  34.     } else if ($2 == "_main")
  35.         main = a2n($1) - a2n(MAIN)
  36. }
  37.  
  38. function x2n(c, t) {
  39.     t = index("0123456789ABCDEF", c) - 1
  40.     if (t < 0)
  41.         t = index("0123456789abcdef", c) - 1
  42.     return t
  43. }
  44.  
  45. function a2n(x, n,m,t,lx) {
  46.     lx = length(x)
  47.     n = 0
  48.     m = 0
  49.     for (i = 1; i <= lx; ++i) {
  50.         t = substr(x,i,1)
  51.         if (t == ":") {
  52.             n = n*16 + m
  53.             m = 0
  54.             continue
  55.         }
  56.         t = x2n(t)
  57.         if (t < 0)
  58.             return -1
  59.         m = m*16 + t
  60.     }
  61.     n = n*16 + m
  62.  
  63.     return n
  64. }
  65.